*****************************************************************************
*																			*
*						Schmutzige Latenzzeiten								*
*																			*
*****************************************************************************

set more off

*--------------------------------------------------------------
* Rohzeiten ohne Interviwervalidierung
*-------------------------------------------------------------

tab pre003_rl
gen rohwbtdirty = pre003_rl							
replace rohwbtdirty =. if  pre003_rl==-99		

gen rohwabsdirty = pre005_rl
replace rohwabsdirty =. if pre005_rl==-99 
sum rohwabs pre005_rl
//tab rohwabs pre007b , m //f�r Briefw�hler keine Latenzmessung

gen rohpiddirty = pre123_rl
replace rohpiddirty = . if  pre123_rl==-99		
sum pre123_rl rohpid

gen rohliredirty = pre018_rl
replace rohliredirty = . if pre123_rl==-99
sum pre018_rl rohlire

fre pre031a_t				//Angela Merkel
gen rohmerkeldirty = pre031a_rl
replace rohmerkeldirty = . if pre031a_rl==-99 

fre pre031b_rl
gen rohsteindirty = pre031b_rl
replace rohsteindirty = . if pre031b_rl==-99 
sum rohstein pre031b_rl

* Zeiten = 0 l�schen
* Solch eien Antwortgeschwindigkeit (unter 75ms) ist 
* unplausibel
foreach var of varlist roh*dirty {
replace `var' = . if `var'==0
}

* Zeiten in Sekunden umrechnen
foreach var of varlist roh*dirty {
replace `var' = `var'/1000
}

*----------------------------------------------------------
* Dirty Basisgeschwindigkeiten �ber L�nge des Interviews
*----------------------------------------------------------

lookfor dauer

hist pre_dauer

* Z�hlen, wie viele Fragen es gab
/*Problem: 
Variablenanzahl ist nicht gleich Fragenanzahl.
Eine Frage kann mehrere Variablen im Datensatz haben z.B. bei Mehrachantworten. 
Andersherum gibt es nat�rlich Variablen, die auf keiner Frage beruhen.

L�sung:
St�rende Variablen ans Ende des Datensatzes schieben, damit Z�hlen der Fragen
�ber Variablenliste m�glich ist.
*/

describe pre001-pre126

order pre004b pre005b pre006b pre007b pre008b /// Wahlentscheidung versch. Kodierversionen
	pre013_2-pre013_10 ///
	pre014 pre014_org pre014c2-pre014c5 pre015b /// wichtigstes Problem
	pre016 pre016_org pre016c2-pre016c5 pre017b /// zweitwichtigstes Problem
	pre036_2-pre036_n3 /// Parteienbias
	pre052_2-pre052_n3 ///
	pre054_2-pre054_n3 ///
	pre056_2-pre056_9 ///  TV-NAchrichten Vortag
	pre060_2-pre060_14 /// Internetnutzung Parteieninfo
	pre069_n2-pre069_n3 /// Gespr�chspartner 1 Wahlentscheidung mehrere Nennungen
	pre074_n2-pre074_n3 /// Gespr�chspartner 3
	pre078_2-pre078_14 /// Wahlkampf
	pre079_2-pre079_14  ///Wahlkampf
	pre081b pre123b pre102, last 
	
	
describe pre001-pre126, number	

gen quest = 248-45

* Z�hlen, wie viele Fragen jeder Befragte hatte
/* Dazu z�hlen wie oft, "trifft nicht zu" oder "nicht teilgenommen" (f�r 
Personen , die interview mittendrin abgebrochen ahben */

egen tnz = anycount(pre001-pre126), values(-95 -97) 

fre tnz

gen quest_pers = quest - tnz

list quest tnz quest_pers

* Durchschnittliche Dauer pro Frage
fre pre_dauer

gen dirtybasis = pre_dauer / quest_pers
hist dirtybasis


*--------------------------------------------------------------------
* Ausschluss von Ausrei�ern
*---------------------------------------------------------------------


* Bereinigung: Ausrei�er 3 Standardabweichungen
//Ausschluss 3 Standardabweichungen �ber und unter Mean
//Wir gehen ja davon aus, dass Antwortzeiten k�rzer werden, je
//n�her Wahltag, deswegen d�rfen Mittelwerte nicht �ber gesamten
//Zeitraum berechnet werden, sondern tagesweise oder wochenweise.
//Entspreched m�ssen dann jene Personen  ausgeschlossen werden, 
//die 3 Standardabweichungen �ber und unter dem Tages- oder 
//Wochenmittelwert liegen.
//erstmal: nach Kalenderwoche (pre_woche), danach tagesweise
//pro Woche etwa 600-800 Befragte

* 1.Schritt: F�r jede Variable 2 Dummys erstellen,
* die angeben, ob eine Antwortzeit �ber oder unter 3 Standard-
* abweichungen vom Mittelwert liegt
* Strategie: sum-Befehl speichert Mittelwert und Standardabweichung
* in r-Beh�lter, auf die durch r(mean) oder r(sd) zugegriffen 
* werden kann. Zwei Schleifen: einmal f�r die Variablen und einmal
* f�r die Zeit.

* Wochenweise
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	foreach week of numlist 28/38 {
		sum `var' if pre_woche==`week'
		gen over`var'`week' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_woche==`week'
		replace over`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under`var'`week' = `var'<(r(mean)-3*r(sd)) ///
			& pre_woche==`week'
		replace under`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}


* Tagesweise
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	forvalues day=1/76 {
		sum `var' if pre_tag==`day'
		gen over`var'd`day' = `var'>(r(mean)+3*r(sd)) ///
			 & pre_tag==`day'
		replace over`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under`var'd`day' = `var'<(r(mean)-3*r(sd)) ///
			& pre_tag==`day'
		replace under`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}



* Ausrei�er 2 Standardabweichungen
* evtl. sind 3 Standardabweichungen zu viel des Guten,
* Standardvorgehen: 2 Stadardabweichungen 
* Wochenweise
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	foreach week of numlist 28/38 {
		sum `var' if pre_woche==`week'
		gen over2sd`var'`week' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_woche==`week'
		replace over2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
		gen under2sd`var'`week' = `var'<(r(mean)-2*r(sd)) ///
			& pre_woche==`week'
		replace under2sd`var'`week' = . if pre_woche==`week' ///
			& `var'==.
	}
}



* Tagesweise
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	forvalues day=1/76 {
		sum `var' if pre_tag==`day'
		gen over2sd`var'd`day' = `var'>(r(mean)+2*r(sd)) ///
			 & pre_tag==`day'
		replace over2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
		gen under2sd`var'd`day' = `var'<(r(mean)-2*r(sd)) ///
			& pre_tag==`day'
		replace under2sd`var'd`day' = . if pre_tag==`day' ///
			& `var'==.
	}
}



* 2. Schritt: diejenigen Antwortzeiten rauswerfen, die Schwelle �ber-
* oder unterschreiten. Neue Variable bilden, damit sp�ter Zeiten ohne
* Ausrei�er und mit Ausrei�ern verglichen werden kann.

foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
gen `var'_out = `var'
gen `var'_2sdout = `var' 
gen `var'_dout = `var'
gen `var'_2sddout = `var'
}

lab var rohwbtdirty_out "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohwabsdirty_out "Zeit Wahlabsicht ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohpiddirty_out "Zeit PID ohne Ausrei�er von wochenweisen Mittelwerten"
lab var rohliredirty_out "Zeit Links-Rechts-Selbsteinstufung ohne Ausrei�er von wochenweisen Mittelwerten"

lab var rohwbtdirty_dout "Zeit Wahlbeteiligungsabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohwabsdirty_dout "Zeit Wahlabsicht ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohpiddirty_dout "Zeit PID ohne Ausrei�er von tagesweisen Mittelwerten"
lab var rohliredirty_dout "Zeit Links-Rechts-Selbsteinstufung ohne Ausrei�er von tagesweisen Mittelwerten"

* Wochenweise

* 3 Standardabweichungen
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	foreach week of numlist 28/38 {
		replace `var'_out = . if over`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_out = . if under`var'`week'==1 ///
			& pre_woche==`week'
}
}

* 2 Standardabweichungen
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	foreach week of numlist 28/38 {
		replace `var'_2sdout = . if over2sd`var'`week'==1 ///
			& pre_woche==`week'
		replace `var'_2sdout = . if under2sd`var'`week'==1 ///
			& pre_woche==`week'
}
}

* Tagesweise: 3 Standardabweichungen
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	forvalues day=1/76 {
		replace `var'_dout = . if over`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_dout = . if under`var'd`day'==1 ///
			& pre_tag==`day'
}
}

* Tagesweise: 2 Standardabweichungen
foreach var of varlist rohwbtdirty-rohsteindirty dirtybasis {
	forvalues day=1/76 {
		replace `var'_2sddout = . if over2sd`var'd`day'==1 ///
			& pre_tag==`day'
		replace `var'_2sddout = . if under2sd`var'd`day'==1 ///
			& pre_tag==`day'
}
}





sum *_out    //Fallzahlen scheinen immer noch okay zu sein
sum *_2sdout



*-------------------------------------------------------------------
*	Residuenlatenzindex 							
*------------------------------------------------------------------

* Wochenweise & 2 Standardabweichungen
reg rohwbtdirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_wbt_2sdout, residuals

reg rohwabsdirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_wabs_2sdout, residuals

reg rohpiddirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_pid_2sdout, residuals

reg rohliredirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_lire_2sdout, residuals

reg rohmerkeldirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_merkel_2sdout, residuals

reg rohsteindirty_2sdout dirtybasis_2sdout [pw=w_ipf1w]
predict dirty_latenz_stein_2sdout, residuals


* Tagesweise & 2 Standardabweichungen
reg rohwbtdirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_wbt_2sddout, residuals

reg rohwabsdirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_wabs_2sddout, residuals

reg rohpiddirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_pid_2sddout, residuals

reg rohliredirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_lire_2sddout, residuals

reg rohmerkeldirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_merkel_2sddout, residuals

reg rohsteindirty_2sddout dirtybasis_2sddout [pw=w_ipf1w]
predict dirty_latenz_stein_2sddout, residuals

* Wochenweise & 3 Standardabweichungen
reg rohwbtdirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_wbt_out, residuals

reg rohwabsdirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_wabs_out, residuals

reg rohpiddirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_pid_out, residuals

reg rohliredirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_lire_out, residuals

reg rohmerkeldirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_merkel_out, residuals

reg rohsteindirty_out dirtybasis_out [pw=w_ipf1w]
predict dirty_latenz_stein_out, residuals

* Tages & 3 Standardabweichungen
reg rohwbtdirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_wbt_dout, residuals

reg rohwabsdirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_wabs_dout, residuals

reg rohpiddirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_pid_dout, residuals

reg rohliredirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_lire_dout, residuals

reg rohmerkeldirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_merkel_dout, residuals

reg rohsteindirty_dout dirtybasis_dout [pw=w_ipf1w]
predict dirty_latenz_stein_dout, residuals


*--------------------------------------------------------
* Datensatz speichern
*--------------------------------------------------------

keep lfdn w_ipf1w week-rohsteindirty ///
	rohwbtdirty_out-dirty_latenz_stein_dout

foreach var of varlist w_ipf1w week-rohsteindirty ///
	rohwbtdirty_out-dirty_latenz_stein_dout {
		rename `var' `var'13
}

gen lfdn13 = lfdn
drop lfdn

gen year = 2013

save "2013\2013_dirty.dta", replace





